/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package tipos;
/**
 *
 * A classe Horario representa o domínio Horário.
 * @author Daniel Saad
 */
public class Horario {

    /**
     * Constante que representa o tamanho
     * do domínio Horário.
     */
    private static final int TAM_HORARIO = 8;
    /**
     * A classe validar é responsável por vericar se o horário
     * está de acordo com o domínio.
     * @param horario Horário a ser validado
     * @exception NullPointerException
     * @exception IllegalArgumentException
     */
   public static void validar(final String horario) {
       int hora, minuto, segundo;
       if (horario == null) {
           throw new NullPointerException("Horário nulo.");
       }
       if (horario.length() != TAM_HORARIO) {
           throw new IllegalArgumentException("Horário Inválido, tamanho"
                   + " ilegal.");
       }

       for (int i = 0; i < horario.length(); i++) {
           /**
            * checa a presença de ":" no horário
            */
           if (i == 2 || i == 5) {
               if (horario.charAt(i) != ':') {
                   throw new IllegalArgumentException("Horário Inválido, não"
                           + "ocorre \":\" na posição 5 ou posição 2 do "
                           + "horário.");
               }
           } else {
               /**
                * checa se o horário é composto por dígitos
                */
               if (!Character.isDigit(horario.charAt(i))) {
                   throw new IllegalArgumentException("Horário Inválido,"
                          + " não é composto apenas por dígitos.");
               }
           }
       }
       /**
        * converte para inteiros para checar
        * os números
        */
       hora = Integer.parseInt("" + horario.charAt(0))
               * 10 + Integer.parseInt("" + horario.charAt(1));
       minuto = Integer.parseInt(""  + horario.charAt(3))
               * 10 + Integer.parseInt("" + horario.charAt(4));
       segundo = Integer.parseInt("" + horario.charAt(6))
               * 10 + Integer.parseInt("" + horario.charAt(7));
       if (hora > 23) {
           throw new IllegalArgumentException("Horário Inválido, "
                  + "hora maior que 23");
       }
       if (minuto > 60) {
           throw new IllegalArgumentException("Horário Inválido, "
                   + "minuto maior que 60");
       }
       if (segundo > 60) {
           throw new IllegalArgumentException("Horário Inválido, segundo"
                   + " maior que 60");
       }
    }
}
